package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import negocio.Concepto;
import negocio.Empresa;

import entity.ConceptoBD;
import entity.ConceptoNumCortoBD;
import entity.ConceptosAdicionalesPorCampaniaBD;
import entity.EmpresaBD;
import entity.ItemConceptoPorCampaniaBD;
import entity.PagoBD;
import entity.PrecioBD;
import entity.TraficoNumCortoBD;
import fachade.PrincipalFachade;

public class ConceptosAdicionalesPorCampaniaDAO extends DAO{

	public ConceptosAdicionalesPorCampaniaBD getConceptosPorCampaniaBYId(Integer id_campania) {
		ResultSet rs = super.getObjectById("conceptos_por_campania", "id_campania", id_campania);
		

		try {
			if( rs.next() ){
				ConceptosAdicionalesPorCampaniaBD conceptosAdicionalesPorCampaniaBD = new ConceptosAdicionalesPorCampaniaBD();
				conceptosAdicionalesPorCampaniaBD.setCampaniaBD(PrincipalFachade.getInstance().getiComprobantesFachade().getCampaniaByID(rs.getInt("id_campania")));
				conceptosAdicionalesPorCampaniaBD.setId_concepto_por_campania(rs.getInt("id_conceptos_por_campania"));
				conceptosAdicionalesPorCampaniaBD.setConceptosPorCampaniaBD(this.getConceptosAdicionalesDeCampaniaConceptosByIdCampania(id_campania));
				
				return conceptosAdicionalesPorCampaniaBD;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	private List<ItemConceptoPorCampaniaBD> getConceptosAdicionalesDeCampaniaConceptosByIdCampania(
			Integer id_campania) {

		ResultSet rs = super.getObjectById("conceptos_por_campania", "id_campania", id_campania);
		
		List<ItemConceptoPorCampaniaBD> itemsConceptosCampania = null;
		
		try {
			while( rs.next() ){
				if( itemsConceptosCampania == null )
					itemsConceptosCampania = new LinkedList<ItemConceptoPorCampaniaBD>();
				ItemConceptoPorCampaniaBD tmpItemConceptoPorCampaniaBD = new ItemConceptoPorCampaniaBD();
				tmpItemConceptoPorCampaniaBD.setCantidad(rs.getInt("cantidad"));
				tmpItemConceptoPorCampaniaBD.setPrecio(rs.getFloat("precio"));
				tmpItemConceptoPorCampaniaBD.setConceptoBD(PrincipalFachade.getInstance().getiConceptosFachade().getConceptoByID(rs.getInt("id_concepto")));
				itemsConceptosCampania.add(tmpItemConceptoPorCampaniaBD);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return itemsConceptosCampania;
				
	}

	public List<ConceptoBD> getConceptosAdicionalesCliente(
			Empresa empresaComprobanteEnPantalla) throws Exception{
		// TODO Auto-generated method stub
		List<ConceptoBD> lbd = null;

		String query = "select  distinct c.id_concepto, c.descripcion, c.tipo,c.codigo_concepto, p.id_precio,p.fecha_desde,p.fecha_hasta,p.precio "
		+" from conceptos_por_campania cpc, concepto c , precio p , campania ca"
		+" where  cpc.id_campania = ca.id_campania"
		+" and ca.tipo = 'Pago'"
		+" and ca.id_empresa = "+ empresaComprobanteEnPantalla.getCodigoEmpresa()
		+" and c.id_concepto = cpc.id_concepto"
		+" and p.id_concepto = c.id_concepto";
		
		ResultSet rs = super.executeQuery(query);
			
		while(rs.next()){
			if(lbd == null)
				lbd = new LinkedList<ConceptoBD>();
			ConceptoNumCortoBD conceptoTmp = new ConceptoNumCortoBD();
			conceptoTmp.setCarrier(new EmpresaBD(empresaComprobanteEnPantalla));
			conceptoTmp.setCodigo_concepto(rs.getString("codigo_concepto"));
			conceptoTmp.setDescripcion(rs.getString("descripcion"));
			conceptoTmp.setEmpresaBD(new EmpresaBD(empresaComprobanteEnPantalla));
			conceptoTmp.setId_concepto(rs.getInt("id_concepto"));
				PrecioBD p = new PrecioBD();
				p.setFecha_desde(rs.getDate("fecha_desde"));
				p.setFecha_hasta(rs.getDate("fecha_hasta"));
				p.setId_precio(rs.getInt("id_precio"));
				p.setPrecio(rs.getFloat("precio"));
			conceptoTmp.setPrecioBD(p);
			conceptoTmp.setTipo(rs.getString("tipo"));
			
			lbd.add(conceptoTmp);
		}
		
		return lbd;
	}
	
}
